package com.chukun.interview.feature.type;

import com.chukun.interview.feature.inf.base.AbstractShape;
import com.chukun.interview.feature.inf.base.PermitsRectangle;
import com.chukun.interview.feature.inf.base.PermitsSquare;
import com.chukun.interview.feature.inf.base.SealedShape;

/**
 * @author chukun
 * @version 1.0.0
 * @description 类型匹配: 类型匹配在 JDK 16 正式发布
 * @createTime 2022年06月05日 23:07:00
 */
public class TypeMatchTemplate {


    /**
     * 模式匹配
     *  1、类型判断语句，也就是匹配谓词，使用的代码是“instanceof PermitsRectangle”
     *  2、类型转换语句，使用的是类型转换运算符（(Rectangle) shape）。第三个部分是声明一个新的本地变量，也就是匹配变量，来承载转换后的数据，
     *  使用的是变量声明和赋值运算符（Rectangle rect =）。第二个部分和第三个部分，只有在类型判断成立的情况下，才能够执行。
     * @param shape
     * @return
     */
    public static boolean isSquare(SealedShape shape) {
        // 使用了模式匹配
        if (shape instanceof PermitsRectangle rect) {
            return rect.length == rect.width;
        }
        // 之前的写法
//        if (shape instanceof PermitsRectangle ) {
//            PermitsRectangle rect = (PermitsRectangle) shape;
//            return rect.length == rect.width;
//        }
        return (shape instanceof PermitsSquare);
    }

}
